package com.mashiro.system.mapper;

import com.mashiro.system.domain.MoeProject;
import com.mashiro.system.domain.data.ProjectData;
import com.mashiro.system.domain.data.ProjectFundData;
import com.mashiro.system.domain.data.ProjectInitAndFinishData;
import com.mashiro.system.domain.data.ProjectTypeData;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 项目Mapper接口
 *
 * @author mashiro
 * @date 2023-04-15
 */
public interface MoeProjectMapper {
    /**
     * 查询项目
     *
     * @param id 项目主键
     * @return 项目
     */
    public MoeProject selectMoeProjectById(Long id);

    /**
     * 查询项目列表
     *
     * @param moeProject 项目
     * @return 项目集合
     */
    public List<MoeProject> selectMoeProjectList(MoeProject moeProject);

    /**
     * 新增项目
     *
     * @param moeProject 项目
     * @return 结果
     */
    public int insertMoeProject(MoeProject moeProject);

    /**
     * 修改项目
     *
     * @param moeProject 项目
     * @return 结果
     */
    public int updateMoeProject(MoeProject moeProject);

    /**
     * 删除项目
     *
     * @param id 项目主键
     * @return 结果
     */
    public int deleteMoeProjectById(Long id);

    /**
     * 批量删除项目
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMoeProjectByIds(Long[] ids);

    /**
     * 获取已分配占比
     *
     * @param id 项目主键
     * @return 结果
     */
    public Integer getAllocatedProportion(@Param("projectId") Long id);

    /**
     * 获取项目当前进度情况
     *
     * @param id 项目主键
     * @return 结果
     */
    public Integer getProjectScheduleDetails(@Param("projectId") Long id);

    /**
     * 查询项目ID列表通过项目经理ID
     *
     * @param
     * @return 项目集合
     */
    public Long[] selectMoeProjectIdsByManagerId(@Param("managerId") Long id);

    /**
     * 获取处在预警期的项目
     *
     * @return 结果
     */
    public List<MoeProject> selectWarnProjectListByManagerId(@Param("managerId") Long id, @Param("warnDay") int warnDay);

    public List<ProjectTypeData> selectMoeProjectTypeData(@Param("doneStatus") String doneStatus);
    public List<ProjectData> selectMoeProjectData(@Param("doneStatus") String doneStatus);
    public List<ProjectFundData> selectProjectFundData();
    public List<ProjectInitAndFinishData> selectProjectInitAndFinishData();
}
